/*
 * MAdministradorEntidades.java
 *
 * Created on 3 de abril de 2006, 10:38 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package ig.metrica.ui.origenesdedatos;

//import ig.metrica.Modelo;
//import ig.metrica.ModeloHome;
import ig.metrica.ModeloSBean;
import ig.metrica.ModelosDTO;
import ig.metrica.modelos.SessionModelosBean;
import ig.metrica.modelos.entity.ModeloorigenesdatosDTO;
import ig.metrica.origenesdedatos.*;
import ig.metrica.ui.interfaces.comunes.IModelo;
import ig.util.NoContinuaException;
import java.util.Collection;
import java.util.Enumeration;
import java.util.Hashtable;

/**
 *
 * @author jsanchez
 */
public class MAdministradorEntidades implements IModelo{
    Collection COrigenesDatos=null;
    PAdministradorEntidades panel=null;
    String nombreModelo=null;
    Integer idModelo=-1;
    private boolean prop;
    /** Creates a new instance of MAdministradorEntidades */
    public MAdministradorEntidades(PAdministradorEntidades panel) {
        this.panel=panel;
    }

    public void guardar() throws NoContinuaException {
        Enumeration<ModeloorigenesdatosDTO> enumeration=HModeloOrDatos.elements();
        SessionModelosBean sessionModelosBean = new SessionModelosBean();
        for (Object elem : CModelosODatos) {
            try {
                if(this.nombreModelo==null){
                    if(!sessionModelosBean.eliminar((ModeloorigenesdatosDTO)elem))
                        throw new NoContinuaException("Error de conexi\u00F3n");
                }else{
                    if(((ModeloorigenesdatosDTO)elem).getModelo().equals(idModelo))
                        if(!sessionModelosBean.eliminar((ModeloorigenesdatosDTO)elem))
                            throw new NoContinuaException("Error de conexi\u00F3n");
                }
            } catch (Exception ex) {
                throw new NoContinuaException(ex.toString());
            }
        }
        while(enumeration.hasMoreElements()){
            try {
                if(!sessionModelosBean.nuevo(enumeration.nextElement()))
                    throw new NoContinuaException("Error tratando de guardar los cambios");
            } catch (Exception ex) {
                throw new NoContinuaException(ex.toString());
            }
        }
    }

    public Object[][] getData(){
        return data;
    }


    private Object[][] data=null;
    private Object[][] dataTable=null;
//    private ModeloHome modeloHome;
//    private Modelo modelo;
    /*private InitialContext ctx=null;
    private InitialContext getContex(){
        if(ctx==null){
            Properties prop = new Properties();
            prop.put( Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
            String Sockec = new ConexionServer().getSocketServer();
            prop.put( Context.PROVIDER_URL, Sockec);
            try {
                ctx = new InitialContext(prop);
            } catch (NamingException ex) {
                ex.printStackTrace();
            }
        }
        return ctx;
    }*/

    private Collection CModelos=null;
    private Collection CModelosODatos=null;
    //private ig.metrica.modelos.SessionModelosRemote sessionRemote=null;


    public Collection buscar() throws NoContinuaException {
        //*************
        try {
            //ig.metrica.modelos.SessionModelosRemoteHome SShome=(ig.metrica.modelos.SessionModelosRemoteHome)getContex().lookup("SessionModelosBean");
            SessionModelosBean sessionModelosBean = new SessionModelosBean();
            //sessionRemote=SShome.create();
            CModelosODatos=sessionModelosBean.findAll();
            CModelos=this.lookupModeloSBean().findAll();
            //OrigenDeDatosHome home = (OrigenDeDatosHome)getContex().lookup("ig.metrica.origenesdedatos.OrigenDeDatos");
            COrigenesDatos=new OrigenDeDatosBean().ejbFindByAll();
            //Collections.sort((L ist<OrigenDeDatos>) COrigenesDatos);
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new NoContinuaException("Servidor fuera de alcance, verifique:\nLa conexion local[Cable de Red]\nEn el archivo 'server.properties' la direccion ip del Servidor\nEl Servidor esta en Servicio");
        }
        int valor=0;
        for (Object elem : COrigenesDatos) {
            try {
                if((((OrigenesdatosDTO)elem).getId()>=2000 && ((OrigenesdatosDTO)elem).getConsecutivo()>=2000) || (((OrigenesdatosDTO)elem).getId()<1000 && ((OrigenesdatosDTO)elem).getConsecutivo()<1000)){
                    valor++;
                }
            } catch (Exception ex) {}
        }

        data=new Object[valor][4];
        if(this.nombreModelo==null)
            dataTable=new Object[valor][3+CModelos.size()];
        else if(this.nombreModelo!=null)
            dataTable=new Object[valor][3];

        for (int i = 0; i < dataTable.length; i++) {
            Integer SISE=0;
            if(this.nombreModelo==null)
                SISE=3+CModelos.size();
            else if(this.nombreModelo!=null)
                SISE=3;

            for (int j = 3; j < SISE; j++) {
                dataTable[i][j]=false;
            }
        }

        int i=0;
        try {
            panel.resetColumnas();
            if(this.nombreModelo==null)
                for (Object elem : CModelos) {
                    panel.addColumna(((ModelosDTO)elem).getNombre());
                } else if(this.nombreModelo!=null){
                    panel.addColumna(this.nombreModelo);
                }
            ConexionBean conexionBean = new ConexionBean();
            for (Object elem : COrigenesDatos) {
                if((((OrigenesdatosDTO)elem).getId()>=2000 && ((OrigenesdatosDTO)elem).getConsecutivo()>=2000) || (((OrigenesdatosDTO)elem).getId()<1000 && ((OrigenesdatosDTO)elem).getConsecutivo()<1000)){
                    Integer pk=((OrigenesdatosDTO)elem).getConsecutivo();
                    String entidad=((OrigenesdatosDTO)elem).getEntidad();
                    
                    /*Properties prop = new Properties();
                    prop.put(Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
                    String Sockec = new ConexionServer().getSocketServer();
                    prop.put(Context.PROVIDER_URL, Sockec);
                    InitialContext ctx = new InitialContext(prop);
                    ConexionHome home = (ConexionHome)ctx.lookup("ig.metrica.origenesdedatos.Conexion");

                    Conexion conexion = home.findByPrimaryKey(((OrigenDeDatos)elem).getConexionPK());*/
                    ConexionBean conexion = conexionBean.ejbFindByPrimaryKey( new ConexionPK( ((OrigenesdatosDTO)elem).getIdconexion() ) );
                    data[i][0]=pk;
                    dataTable[i][0]=pk;//datos para la tabla
                    data[i][1]=entidad;
                    dataTable[i][1]=entidad.trim();//datos para la tabla1
                    dataTable[i][2]=conexion.getNombre();
                    data[i][2]=((OrigenesdatosDTO)elem).getCampos().trim();
                    data[i][3]=((OrigenesdatosDTO)elem).getQuery().trim();
                    if(CModelosODatos!=null)
                        for (Object elem0: CModelosODatos) {
                            if(((ModeloorigenesdatosDTO)elem0).getOrigenesdatos().equals(pk)){
                                for (Object elem1: CModelos) {
                                    Integer idModelo= ((ModelosDTO)elem1).getId();
                                    if(idModelo.equals(((ModeloorigenesdatosDTO)elem0).getModelo())) {
                                        for (int j = 0; j < panel.getNomCol().length; j++) {
                                            if(((ModelosDTO)elem1).getNombre().trim().equals(panel.getNomCol()[j].trim())){
                                                dataTable[i][j]=true;
                                                this.addDTO(Integer.valueOf(((ModelosDTO)elem1).getId()+""+pk),(ModeloorigenesdatosDTO)elem0);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        i++;
                }
            }
            panel.setData(dataTable);
            return COrigenesDatos;
        } catch (Throwable ex) {
            ex.printStackTrace();
            //Logger.getLogger(MAdministradorEntidades.class.getName()).log(Level.SEVERE, null, ex);
        } /*catch (NamingException ex) {
            Logger.getLogger(MAdministradorEntidades.class.getName()).log(Level.SEVERE, null, ex);
        } catch (RemoteException ex) {
            ex.printStackTrace();
        }*/
        return null;
    }

    public Integer getIdModelo(String nombreModelo){
        for (Object elem : CModelos) {
            if(((ModelosDTO)elem).getNombre().trim().equals(nombreModelo.trim()))
                return ((ModelosDTO)elem).getId();
        }
        return null;
//        return ((ModelosDTO)CModelos.iterator().next()).getId();
    }

    public void modificar() throws NoContinuaException {
    }

    public void nuevo() throws NoContinuaException {
    }

    public void eliminar() throws NoContinuaException {
    }

    public void salir() throws NoContinuaException {
    }

    public void imprimir() throws NoContinuaException {
    }

    public Object getTO() throws NoContinuaException {
        return null;
    }

    public void cancelar() throws NoContinuaException {
    }
    private Hashtable<Integer,ModeloorigenesdatosDTO> HModeloOrDatos= new Hashtable<Integer,ModeloorigenesdatosDTO>();

    void addDTO(Integer key,ModeloorigenesdatosDTO dto) {
        HModeloOrDatos.put(key,dto);
    }

    void remove(Integer key) {
        //System.out.println("rem");
        HModeloOrDatos.remove(key);
        //System.out.println("SISE"+HModeloOrDatos.size());
        //throw new UnsupportedOperationException("Not yet implemented");
    }

    void setNombreModelo(String nobreModelo) {
        this.nombreModelo=nobreModelo;
    }
    void setIdModelo(Integer idModelo){
        this.idModelo=idModelo;
    }

    //ig.metrica.ModeloSRemote modeloSB=null;
    private ig.metrica.ModeloSBean lookupModeloSBean() {
        return new ModeloSBean();
        /*try {
            if(modeloSB==null){
                Properties prop = new Properties();
                prop.put( Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
                String Sockec = new ConexionServer().getSocketServer();
                prop.put( Context.PROVIDER_URL, Sockec);

                javax.naming.Context c = new javax.naming.InitialContext(prop);
                Object remote = c.lookup("ModeloSBean");
                ig.metrica.ModeloSRemoteHome rv = (ig.metrica.ModeloSRemoteHome) javax.rmi.PortableRemoteObject.narrow(remote, ig.metrica.ModeloSRemoteHome.class);
                modeloSB =rv.create();
            }
            return modeloSB;
        } catch(javax.naming.NamingException ne) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ne);
            throw new RuntimeException(ne);
        } catch(javax.ejb.CreateException ce) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ce);
            throw new RuntimeException(ce);
        } catch(java.rmi.RemoteException re) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,re);
            throw new RuntimeException(re);
        }*/
    }
}
